package xkp.lesson5;

public class Demo1 {
	public static void main(String[] args) {
		//不能使用接口/抽象类直接实例化对象
		//MyInterface interface1 = new MyInterface();
		
		//要使用接口/抽象类具体的子类去实例化对象
		//我们要有具体的子类
		//此处可以定义一个局部内部类
		//注意：局部内部类只能在所在的作用域内使用，目前该匿名内部类的作用域是在main方法中
		//局部内部类和局部变量差不多，也是类似临时使用
		//但是局部内部类不管怎么样也是专门定义了一个类
		class MyClass implements MyInterface{
			@Override
			public void fun() {
				System.out.println("I can do someting!!!");	
			}		
		}
		
		//父接口指向子类对象---多态(运行时多态)的一种用法
		MyInterface interface1 = new MyClass();
		interface1.fun();
		
		//我们可以使用匿名内部类
		//这个类没有名称
		MyInterface interface2 = new MyInterface() {
			
			@Override
			public void fun() {
				System.out.println("I am a 匿名内部类!!!!");
				
			}
		};
		
		interface2.fun();
		
		//此处又是一个匿名内部类
		MyInterface interface3 = new MyInterface() {
			
			@Override
			public void fun() {
				System.out.println("I am anthor 匿名内部类");
				
			}
		};
		interface3.fun();
		
		
		//此处是匿名内部类+匿名对象
		//。。。。
		new MyInterface() {
			
			@Override
			public void fun() {
				System.out.println("我又是一个匿名内部类");
				
			}
		}.fun();
		
		new MyClass().fun();
		MyClass class1 = new MyClass();
		class1.fun();
		
		//如果我们对匿名内部类的使用场景还是不够清晰
		//在多线程部分会再次加深印象
	}

}
